package com.tecode.myBooks.filter;

import javax.servlet.DispatcherType;
import javax.servlet.FilterChain;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;

/**
 * Created with Intellij IDEA.
 *
 * @Author: Gabriel
 * @Date: 2018-12-12
 * @Description:
 * 分析
 * 		1.有些页面需要登录后才能访问。

 * 		2.确定哪些资源需要登录后才能访问。
 *				 * 	<context-param>
							<param-name>loginPage</param-name>
							<param-value>/isLogin/,/a/,/jsp/abc.jsp</param-value>
					</context-param>
 *
 * 		3.获得当前请求的uri地址。
 *			request.getRequestURI();
 * 		4.判断当前的uri地址是否是需要登录的。
 * 		5.如果不需要登录则直接放行。
 * 		6.如果需要登录
 * 			从session中获得是否存在有登录用户的session属性值对象
 * 		7.如果session中存在，放行，不存在，则重定向到登录页面。
 *
 */
@WebFilter(value = "/*",dispatcherTypes = {DispatcherType.REQUEST,DispatcherType.FORWARD,DispatcherType.INCLUDE})
public class IsLoginFilter extends MyFilters {

	@Override
	public void doFilter(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws IOException, ServletException {
				HttpSession session = request.getSession();
				if(session.getAttribute("loginUser") != null){
					filterChain.doFilter(request,response);
					return;
				}

				//1.获得整个工程中设置哪些页面需要登录才能访问的参数值。
				ServletContext context = request.getServletContext();
				String[] loginPages = context.getInitParameter("loginPage").split(",");

				//2.获得当前请求的URI地址
				String uri = request.getRequestURI();

				//3.判断当前请求的uri是否需要登录
				boolean falg = false;
				for (String loginPage : loginPages) {
					if(uri.contains(loginPage)){
						falg = true;
						break;
					}
				}


				//4.如果需要登录 则判断session 中是否存在登录的用户对象属性
				if(falg){
					response.sendRedirect(request.getContextPath() +"/html/login.jsp");
					return;
				}

				filterChain.doFilter(request,response);


	}
}